MySQL クエリキャッシュ
#mysql
https://user-images.githubusercontent.com/17611000/33702431-d906b436-db66-11e7-9925-22e6d0efcda9.png
https://github.com/cinra/mysql/issues/1
要点
クエリキャッシュは、ワークロードや環境によっては必ずしも効果を発揮するとも限らない。
なので、ちゃんと本番ワークロードと同じ状況を検証した上で利用するかどうかお薦めするよ。
クエリキャッシュとは
注意.icon MySQL8.0からはクエリキャッシュ廃止済み
MySQL :: MySQL 5.6 リファレンスマニュアル :: 8.9.3 MySQL クエリーキャッシュ
クエリーキャッシュには、クライアントに送信された対応する結果とともに、SELECT ステートメントのテキストが格納されます。あとで同じステートメントを受け取った場合、サーバーはそのステートメントを再度解析して実行する代わりに、クエリーキャッシュから結果を取得します。クエリーキャッシュはセッション間で共有されるため、1 つのクライアントで生成された結果セットを、別のクライアントによって発行された同じクエリーへの応答で送信できます。
SELECTのステートメントそれ自体とその結果を一緒にキャッシュして保持しておき、全く同じSELECTステートメントが飛んできたら、キャッシュ保持してた結果を返す。
これはセッション間で共有するキャッシュとなる。
クエリキャッシュの効能と不安
効能
クエリキャッシュはキャッシュというだけあって、ヒット率が上がるならクエリの返答速度も上がるメリットが出る。
ただし、やりすぎると危険...
不安
かなりのパフォーマンスの改善の可能性を提供しますが、すべての環境でそうなるものと想定しないでください。クエリーキャッシュの構成やサーバーのワークロードによっては、実際にパフォーマンスの低下が見られることもあります。
1. クエリーキャッシュのサイズを過度に大きくすると、キャッシュの保守に必要なオーバーヘッドが増える。
2. テーブルデータの内容が頻繁に変わってしまうようなワークロードだと、キャッシュが全く意味をなさなくなる。
DSAS開発者の部屋:クエリキャッシュは切ったほうがいいんじゃなイカ?
ソーシャルゲームは一般サイトよりもDBへの更新クエリの割合が多くなりがちです。更新クエリが多いMySQLでは、通常は有益なクエリキャッシュが無益どころか有害になります。